#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

//动态顺序表：
typedef int SLDataType;
typedef struct
{
	SLDataType* a;  //指向动态开辟的数组
	size_t size;    //有效数据的个数
	size_t capacity;//空间容量的大小
} SL;
//初始化顺序表：
void SLInit(SL* psl);

//顺序表的销毁：
void SLDestroy(SL* psl);

//顺序表内存的判断：如果内存空间不够，我们就申请空间：
void SLCheckCapacity(SL* psl);

//头尾的插入和删除：
void SLPushFront(SL* psl, SLDataType x);//----头插时间复杂度：o(N^2)
void SLPushBack(SL* psl, SLDataType x); //----尾插时间复杂度：o(1)
void SLPopFront(SL* psl);               //----头删时间复杂度：o(N^2)
void SLPopBack(SL* psl);                //----尾删时间复杂度：o(1)

//顺序表的打印：
void SLPrint(SL* psl);

//任意位置的插入和删除：
void SLInsert(SL* psl, int pos, SLDataType x);
void SLErase(SL* psl, int pos);

//在顺序表里面查找数据：
//情况一：根据所给下标找元素：
SLDataType SLIndex(SL* psl, int pos);
//情况二：根据所给元素定位下标：
int SLFind(SL* psl, SLDataType x);